Fix #316871, reported by Dan Winship:
authorMatthias Clasen <mclasen@redhat.com>
Mon, 26 Sep 2005 20:27:44 +0000 (20:27 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 26 Sep 2005 20:27:44 +0000 (20:27 +0000)
2005-09-26  Matthias Clasen  <mclasen@redhat.com>

Fix #316871, reported by Dan Winship:

* gdk/gdkwindow.h (struct _GdkWindowObject): Add a shaped flag.

* gdk/x11/gdkwindow-x11.c (gdk_window_shape_combine_mask)
(gdk_window_shape_combine_region): Set it here.

* gdk/gdkwindow.c (gdk_window_invalidate_maybe_recurse): Don't
remove the child area for shaped windows.

ChangeLog
ChangeLog.pre-2-10
gdk/gdkwindow.c
gdk/gdkwindow.h
gdk/x11/gdkwindow-x11.c

index cb6ea23317eb247c56c78f773b209e96e563c8d0..b9061a618382dc942955e431a6960cde1a20ea03 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+       Fix #316871, reported by Dan Winship:
+       
+       * gdk/gdkwindow.h (struct _GdkWindowObject): Add a shaped flag.
+
+       * gdk/x11/gdkwindow-x11.c (gdk_window_shape_combine_mask) 
+       (gdk_window_shape_combine_region): Set it here.
+
+       * gdk/gdkwindow.c (gdk_window_invalidate_maybe_recurse): Don't
+       remove the child area for shaped windows.
+
 2005-09-23  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_finalize):
index cb6ea23317eb247c56c78f773b209e96e563c8d0..b9061a618382dc942955e431a6960cde1a20ea03 100644 (file)
@@ -1,3 +1,15 @@
+2005-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+       Fix #316871, reported by Dan Winship:
+       
+       * gdk/gdkwindow.h (struct _GdkWindowObject): Add a shaped flag.
+
+       * gdk/x11/gdkwindow-x11.c (gdk_window_shape_combine_mask) 
+       (gdk_window_shape_combine_region): Set it here.
+
+       * gdk/gdkwindow.c (gdk_window_invalidate_maybe_recurse): Don't
+       remove the child area for shaped windows.
+
 2005-09-23  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_finalize):
index 186d85d928d9fceaec9dd7e682e5aab43ef9823d..de19d3f74f07074e01c6f57bd0d88bc769dcdae6 100644 (file)
@@ -2450,7 +2450,7 @@ gdk_window_invalidate_maybe_recurse (GdkWindow *window,
          child_region = gdk_region_rectangle (&child_rect);
          
          /* remove child area from the invalid area of the parent */
-         if (GDK_WINDOW_IS_MAPPED (child))
+         if (GDK_WINDOW_IS_MAPPED (child) && !child->shaped)
            gdk_region_subtract (visible_region, child_region);
          
          if (child_func && (*child_func) ((GdkWindow *)child, user_data))
index c1b14468f760deea3f14f27e6859a0113aaa4cd2..60d2f0b5c707cd9389548f69c6bc4409167ebd96 100644 (file)
@@ -287,6 +287,7 @@ struct _GdkWindowObject
 
   guint accept_focus : 1;
   guint focus_on_map : 1;
+  guint shaped : 1;
   
   GdkEventMask event_mask;
 };
index eeeb3e9a9226a17a96767a96dde7f6b72080c77b..30722fe13308eab370813b10c13ac872df3418c9 100644 (file)
@@ -3672,6 +3672,7 @@ gdk_window_shape_combine_mask (GdkWindow *window,
                               GdkBitmap *mask,
                               gint x, gint y)
 {
+  GdkWindowObject *private = (GdkWindowObject *)window;
   Pixmap pixmap;
   gint xoffset, yoffset;
   
@@ -3694,12 +3695,16 @@ gdk_window_shape_combine_mask (GdkWindow *window,
       if (mask)
        {
          pixmap = GDK_PIXMAP_XID (mask);
+         
+         private->shaped = TRUE;
        }
       else
        {
          x = 0;
          y = 0;
          pixmap = None;
+
+         private->shaped = FALSE;
        }
       
       XShapeCombineMask (GDK_WINDOW_XDISPLAY (window),
@@ -3741,7 +3746,8 @@ gdk_window_shape_combine_region (GdkWindow *window,
                                  GdkRegion *shape_region,
                                  gint       offset_x,
                                  gint       offset_y)
-{
+{ 
+  GdkWindowObject *private = (GdkWindowObject *)window;
   gint xoffset, yoffset;
   
   g_return_if_fail (GDK_IS_WINDOW (window));
@@ -3770,6 +3776,8 @@ gdk_window_shape_combine_region (GdkWindow *window,
       gint n_rects = 0;
       XRectangle *xrects = NULL;
 
+      private->shaped = TRUE;
+
       _gdk_region_get_xrectangles (shape_region,
                                    0, 0,
                                    &xrects, &n_rects);